﻿namespace _12_命名空间;

internal class Program
{
    private static void Main(string[] args)
    {
        #region 0_概念

        // 命名空间用于在最高逻辑级别上组织代码
        // 命名空间是C#程序中的逻辑单元

        #endregion

        #region 1_创建命名空间

        // 使用namespace关键字可以在CShaper中声明一个名称空间
        // 命名空间名称必须以字母或下划线开头，并且只能包含字母、数字和下划线

        #endregion

        #region 2_内置名称空间

        // System.Console.WriteLine("Hello World!"); <===> using System; Console.WriteLine("Hello World!");

        #endregion

        #region 3_共享名称空间

        // 命名空间可以包含类、结构、枚举、接口、委托、常量、变量、方法和属性
        // 命名空间可以包含命名空间
        // 命名空间可以嵌套命名空间

        #endregion

        #region 4_使用using

        // 命名空间可以包含类、结构、枚举、接口、委托、常量、变量、方法和属性
        // 命名空间可以包含命名空间
        // 命名空间可以嵌套命名空间

        #endregion

        #region 5_根名称空间

        //var sys = new System();
        //// 使用global::可以访问根命名空间,也就是那个内置的命名空间System
        //global::System.Console.WriteLine(sys);

        #endregion

        #region 6_默认名称空间

        // 默认名称空间是当前程序集的名称
        // 如果程序集名称为MyAssembly，默认名称空间为MyAssembly

        #endregion

        #region 7_名称空间别名

        // 比如现在有一个名称空间: ZetCode.Item.Library.Shelf.Book, 我只想引用Book类，不想引用ZetCode.Item.Library.Shelf.Book.Book
        // 可以使用using关键字给名称空间起别名
        // using ZetBook = ZetCode.Item.Library.Shelf.Book.Book;
        // 然后就可以直接使用Book类了
        // 注意: 别名和using一样, 要写在外面

        #endregion
    }

    // 该类与.Net Framework中的System类重名
    private class System
    {
        public override string ToString()
        {
            return "This is a System Class";
        }
    }
}